package esconceito



import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
import org.springframework.web.multipart.MultipartHttpServletRequest
import org.springframework.web.multipart.commons.CommonsMultipartFile

@Transactional(readOnly = true)
class ConceitoController {

	static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

	def index(Integer max) {
		params.max = Math.min(max ?: 10, 100)
		respond Conceito.list(params), model:[conceitoInstanceCount: Conceito.count()]
	}

	def show(Conceito conceitoInstance) {
		respond conceitoInstance
	}

	def create() {
		respond new Conceito(params)
	}

	def save = {
		
		MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request
		CommonsMultipartFile file = (CommonsMultipartFile) mpr.getFile("file")

		String caminhoDoArquivo = file.getOriginalFilename()
		String formatodoArquivo = caminhoDoArquivo.substring(caminhoDoArquivo.lastIndexOf(".")+1)
	
		log.debug("formatodoArquivo: ${formatodoArquivo}")

	
		if(formatodoArquivo.equals("")){
			log.debug("Nenhum arquivo importado. Por favor, tente novamente.")
			flash.error = "Nenhum arquivo importado. Por favor, tente novamente."
		} else {
			InputStream input = file.getInputStream() 
			
			XmlParser parser = new XmlParser()
			
			def conceitosInstance = parser.parse(input)
			
			conceitosInstance.conceito.each {c	 ->
				
//				def off = new Offset()
//				if(!Offset.findByTempo(c.@offset)) {
//				off = Offset(tempo: c.@offset).save(failOnError: true)
//				} else {
//				off = Offset.findByTempo(c.@offset)
//				}
				def off = new Offset(tempo: c.@offset).save(failOnError: true)

				if(!Conceito.findByNome(c.@nome)) {
					def conceito = new Conceito(nome: c.@nome, descricao: c.@descricao, offsets: off).save(failOnError: true)
					
					c?.@video = c?.@video?.replace("watch?", "");
					c?.@video = c?.@video?.replace("=", "/");
					
					if(!Video.findByLinkYoutube(c.@video)){
						new Video(linkYoutube: c.@video, conceitos: conceito).save(failOnError: true)
					} else {
						def vid = Video.findByLinkYoutube(c.@video)
						vid.conceitos.add(conceito)
						vid.save(failOnError: true)
					}

				}
				//new Conceito(c.attributes()).save()
				//new Conceito(nome: c.@nome, descricao: c.@descricao, offset: off, video: vid).save()
			}
		}
			redirect action:"index", method:"GET"
	}

//	@Transactional
//	def save(Conceito conceitoInstance) {
//		def uploadedFile = request.getFile('arquivoXML')
//		//if(!uploadedFile.empty){
//			//CAPTURAR PARA CONCEITO INSTANCE O XML AQUI PARA CADA PROPRIEDADE
//			def conceitosInstance = new XmlSlurper().parse(uploadedFile)
//			conceitosInstance.conceitoInstance.each() {c ->
//				def off = new Offset(tempo: c.@tempo)
//				def vid = new Video(link: c.@link)
//				new Conceito(nome: c.@nome, descricao: c.@descricao, offset: off, video: vid).save()
//
//				//new Conceito(c.attributes()).save()
//				
//			//}
//
//			if (conceitoInstance == null) {
//				notFound()
//				return
//			}
//
//			if (conceitoInstance.hasErrors()) {
//				respond conceitoInstance.errors, view:'create'
//				return
//			}
//
//			conceitoInstance.save flush:true
//
//			request.withFormat {
//				form multipartForm {
//					flash.message = message(code: 'default.created.message', args: [
//						message(code: 'conceito.label', default: 'Conceito'),
//						conceitoInstance.id
//					])
//					redirect conceitoInstance
//				}
//				'*' { respond conceitoInstance, [status: CREATED] }
//			}
//		}
//	}

	//	@Transactional
	//	def save(Conceito conceitoInstance) {
	//		def arquivoXML = new XmlParser().parseText("...")
	//
	//
	//		if (conceitoInstance == null) {
	//			notFound()
	//			return
	//		}
	//
	//		if (conceitoInstance.hasErrors()) {
	//			respond conceitoInstance.errors, view:'create'
	//			return
	//		}
	//
	//		conceitoInstance.save flush:true
	//
	//		request.withFormat {
	//			form multipartForm {
	//				flash.message = message(code: 'default.created.message', args: [message(code: 'conceito.label', default: 'Conceito'), conceitoInstance.id])
	//				redirect conceitoInstance
	//			}
	//			'*' { respond conceitoInstance, [status: CREATED] }
	//		}
	//	}


	def edit(Conceito conceitoInstance) {
		respond conceitoInstance
	}

	@Transactional
	def update(Conceito conceitoInstance) {
		if (conceitoInstance == null) {
			notFound()
			return
		}

		if (conceitoInstance.hasErrors()) {
			respond conceitoInstance.errors, view:'edit'
			return
		}

		conceitoInstance.save flush:true

		request.withFormat {
			form multipartForm {
				flash.message = message(code: 'default.updated.message', args: [
					message(code: 'Conceito.label', default: 'Conceito'),
					conceitoInstance.id
				])
				redirect conceitoInstance
			}
			'*'{ respond conceitoInstance, [status: OK] }
		}
	}

	@Transactional
	def delete(Conceito conceitoInstance) {

		if (conceitoInstance == null) {
			notFound()
			return
		}

		conceitoInstance.delete flush:true

		request.withFormat {
			form multipartForm {
				flash.message = message(code: 'default.deleted.message', args: [
					message(code: 'Conceito.label', default: 'Conceito'),
					conceitoInstance.id
				])
				redirect action:"index", method:"GET"
			}
			'*'{ render status: NO_CONTENT }
		}
	}

	protected void notFound() {
		request.withFormat {
			form multipartForm {
				flash.message = message(code: 'default.not.found.message', args: [
					message(code: 'conceito.label', default: 'Conceito'),
					params.id
				])
				redirect action: "index", method: "GET"
			}
			'*'{ render status: NOT_FOUND }
		}
	}
}
